<!DOCTYPE html>
<html lang="zh-CH" >
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="" />
	
	
	
	<title>Git 学习笔记上 ｜ zansimple</title>
	
    
    
    <meta name="description" content="git 入门 git 就是在任意时间把文档的状态作为更新记录保存起来，这样可以在编辑过的文档中任意切换或操作之前的状态。并且在覆盖较新的文件是会发出警告，避免无意中覆盖他人的编辑内容。
提交本地数据的内容时会生成上次提交的状态与当前状态的差异记录（按时间排列），这样就可以知道之前的修改内容了。
 注意：不同的内容尽量分开提交（比如： bug 修复和功能添加），这样方便查找和修改。 解决冲突：如果远程数据库和本地数据库的同一个地方都发生修改的情况，在推送的时候就会发生合并冲突。解决办法就是将远程数据库的文件 pull 下来,手动修改冲突位置（将远程仓库和本地仓库冲突的内容全部保留，然后删除掉提示行）。重新提交，最后 push 到远程仓库就可以了。  git 高级 分支 再开发软件的时候可能会存在不同的开发人员开发不同的功能或者修复 bug ，也可能存在多个 release 版本，并且需要同时维护。这样通过分支就可以做到同时进行并且互不影响，在工作完成之后再合并到主分支上。这样在发生问题的时候就会很容易定位和修改。
分支运用的规则  Merge 分支 Merge 分支是为发布 release 版本而创建的分支，可以作为 Topic 的源分支，重要的事保持分支稳定的状态，一般情况下会把 master 分支当做 Merge 分支。 Topic 分支 Topic 分支是为了开发新功能或者修复 bug 而创建的分支。当分支工作完成之后再合并到 Merge 分支上。  分支创建命令
git branch &amp;lt; branchName &amp;gt;  分支删除命令
git branch -d &amp;lt; branchName &amp;gt;  分支切换 分支切换命令
git checkout &amp;lt; branchName &amp;gt;  在分支切换前 git 会把工程还原到目标分支上次提交的内容处， checkout 之后提交的记录会追加到目标分支的历史记录中。" />
    

    

	
    
    <link rel="shortcut icon" href="https://lenzan.github.io/images/favicon.ico" />

    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/normalize.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/animate.css@4.1.0/animate.min.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/zozo.css" />
	<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/remixicon@2.5.0/fonts/remixicon.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/highlight.css" />

    
    
</head>

<body>
    <div class="main animate__animated animate__fadeInDown">
        <div class="nav_container animated fadeInDown">
    <div class="site_nav" id="site_nav">
        <ul>
            
            <li>
                <a href="/">首页</a>
            </li>
            
            <li>
                <a href="/">unity</a>
            </li>
            
            <li>
                <a href="/">归档</a>
            </li>
            
            <li>
                <a href="/">关于</a>
            </li>
            
        </ul>
    </div>
    <div class="menu_icon">
        <a id="menu_icon"><i class="ri-menu-line"></i></a>
    </div>
</div>
        <div class="header animated fadeInDown">
    <div class="site_title_container">
        <div class="site_title">
            <h1>
                <a href="https://lenzan.github.io/">
                    <span>zansimple</span>
                    <img src="https://lenzan.github.io/images/logo.svg" />
                </a>
            </h1>
        </div>
        <div class="description">
            <p class="sub_title">专注于Unity虚拟现实开发，游戏开发</p>
            <div class="my_socials">
                
                <a href="https://lenzan.github.io/index.xml" type="application/rss+xml" title="rss" target="_blank"><i
                        class="ri-rss-fill"></i></a>
            </div>
        </div>
    </div>
</div>
        <div class="content">
            <div class="post_page">
                <div class="post animate__animated animate__fadeInDown">
                    <div class="post_title post_detail_title">
                        <h2><a href='/posts/git/git/'>Git 学习笔记上</a></h2>
                        <span class="date">2018.06.05</span>
                    </div>
                    <div class="post_content markdown"><!-- raw HTML omitted -->
<h2 id="git-入门">git 入门</h2>
<p>git 就是在任意时间把文档的状态作为更新记录保存起来，这样可以在编辑过的文档中任意切换或操作之前的状态。并且在覆盖较新的文件是会发出警告，避免无意中覆盖他人的编辑内容。<br>
提交本地数据的内容时会生成上次提交的状态与当前状态的差异记录（按时间排列），这样就可以知道之前的修改内容了。</p>
<ul>
<li>注意：不同的内容尽量分开提交（比如： bug 修复和功能添加），这样方便查找和修改。</li>
<li>解决冲突：如果远程数据库和本地数据库的同一个地方都发生修改的情况，在推送的时候就会发生合并冲突。解决办法就是将远程数据库的文件 pull 下来,手动修改冲突位置（将远程仓库和本地仓库冲突的内容全部保留，然后删除掉提示行）。重新提交，最后 push 到远程仓库就可以了。</li>
</ul>
<h2 id="git-高级">git 高级</h2>
<h3 id="分支">分支</h3>
<p>再开发软件的时候可能会存在不同的开发人员开发不同的功能或者修复 bug ，也可能存在多个 release 版本，并且需要同时维护。这样通过分支就可以做到同时进行并且互不影响，在工作完成之后再合并到主分支上。这样在发生问题的时候就会很容易定位和修改。</p>
<h4 id="分支运用的规则">分支运用的规则</h4>
<ul>
<li>Merge 分支
Merge 分支是为发布 release 版本而创建的分支，可以作为 Topic 的源分支，重要的事保持分支稳定的状态，一般情况下会把 master 分支当做 Merge 分支。</li>
<li>Topic 分支
Topic 分支是为了开发新功能或者修复 bug 而创建的分支。当分支工作完成之后再合并到 Merge 分支上。</li>
</ul>
<p>分支创建命令</p>
<pre><code>git branch &lt; branchName &gt;  
</code></pre>
<p>分支删除命令</p>
<pre><code>git branch -d &lt; branchName &gt;  
</code></pre>
<h4 id="分支切换">分支切换</h4>
<p>分支切换命令</p>
<pre><code>git checkout &lt; branchName &gt;  
</code></pre>
<p>在分支切换前 git 会把工程还原到目标分支上次提交的内容处， checkout 之后提交的记录会追加到目标分支的历史记录中。</p>
<ul>
<li>HEAD<br>
HEAD是指向正在使用的分支的最后一次更新，可以通过 HEAD 的移动来改变使用的分支。</li>
<li>stash<br>
在你切换分支之前，你的工程中修改的或者新加的文件内容没有提交。切换分支之后这些内容将会移到目标分支中。但是如果目标分支也修改了这些文件，则在 checkout 时会失败，解决这个问题有两种办法：
<ul>
<li>在切换分支前先将这些修改的内容提交，然后在切换分支</li>
<li>用 stash 暂时保存工程中还没有提交过的修改的内容，事后在拿出来应用到原先的分支上，或者其他的分支。</li>
</ul>
</li>
</ul>
<h4 id="分支合并">分支合并</h4>
<p>例：bugfix 分支是从主分支（ master ）分叉处来的。</p>
<ul>
<li>merge
<ul>
<li>在合并之前如果 master 分支没有做任何的修改，那合并很简单直接将修改的 bugfix 分支合并到 master 分支上（也就是将 master 分支的位置移动到 bugfix 分支上） bugfix 分支上的历史记录包含所有 master 分支的记录， Git 就会合并。 fast-forward (快进)合并。</li>
<li>如果 master 分支在 bugfix 分支分出去之后也有修改这样在合并的时候两个分支修改的内容合起来生成一个新的提交，并且 master 分支的 HEAD 将移动到新生成的提交上。</li>
</ul>
</li>
<li>rebase<br>
将 bugfix 分支 rebase 到 master 分支上(命令： git rebase master )就是把 bugfix 分支的历史记录放到 master 分支的记录后面，然后提交 bugfix 分支的内容。提交过程中可能会发生冲突，修改冲突就好（命令： git add file , git rebase &ndash;continue )。在 rebase 的时候，修改冲突后不是使用 commit 命令，而是执行 rebase 命令指定 &ndash;continue 选项。如果要取消 rebase ，指定 &ndash;abort 选项。在 rebase 之后 master 的 HEAD 的位置并未改变，所以合并两个分支就是将 master 分支的 HEAD 移动到 bugfix 分支的 HEAD 位置上（命令： git merge bugfix ）。</li>
</ul>
<h5 id="小结">小结：</h5>
<p>merge 和 rebase 合并都是合并历史记录，但有各自的特征</p>
<ul>
<li>merge<br>
保持修改内容的历史记录，但是历史记录会很复杂。</li>
<li>rebase<br>
历史记录简单,就是将原有的提交的基础上将差异内容反映进去。但是在提交的工程中可能会发生冲突.</li>
</ul>
</div>
                    <div class="post_footer">
                        
                        <div class="meta">
                            <div class="info">
                                <span class="field tags">
                                    <i class="ri-stack-line"></i>
                                    
                                    <a href="https://lenzan.github.io/tags/Git/">Git</a>
                                    
                                </span>
                            </div>
                        </div>
                        
                    </div>
                </div>
                
                
            </div>
        </div>
    </div>
    <a id="back_to_top" href="#" class="back_to_top"><span>△</span></a>
    <footer class="footer">
    <div class="powered_by">
        <a href="https://varkai.com">Designed by VarKai,</a>
        <a href="http://www.gohugo.io/">Proudly published with Hugo</a>
    </div>

    <div class="footer_slogan">
        <span></span>
    </div>
</footer>
    <script src="https://lenzan.github.io/js/jquery-3.5.1.min.js"></script>
<link href="https://lenzan.github.io/css/fancybox.min.css" rel="stylesheet">
<script src="https://lenzan.github.io/js/fancybox.min.js"></script>
<script src="https://lenzan.github.io/js/zozo.js"></script>






</body>

</html>